//
// Created by 14590 on 25-8-30.
//

#ifndef BSP_SPI_H
#define BSP_SPI_H

#include "stm32f4xx.h"
#include "spi.h"

/*------------------------------------------------------  引脚配置宏 -------------------------------------------------*/

#define  LCD_SPI hspi3           // SPI局部宏，方便修改和移植

#define 	LCD_SCK_PIN      		 GPIO_PIN_3									// SCK引脚， 需要重定义SPI3的IO口复用
#define 	LCD_SCK_PORT     		 GPIOB                 					// SCK引脚用到的端口
#define 	GPIO_LCD_SCK_CLK      __HAL_RCC_GPIOB_CLK_ENABLE()  		// SCK引脚IO口时钟

#define 	LCD_SDA_PIN      		 GPIO_PIN_5									// SDA引脚， 需要重定义SPI3的IO口复用
#define 	LCD_SDA_PORT    		 GPIOB                 					// SDA引脚用到的端口
#define 	GPIO_LCD_SDA_CLK      __HAL_RCC_GPIOB_CLK_ENABLE()  		// SDA引脚IO口时钟


#define 	LCD_CS_PIN       				GPIO_PIN_15							// CS片选引脚，低电平有效
#define 	LCD_CS_PORT      				GPIOA                 			// CS引脚用到的端口
#define 	GPIO_LCD_CS_CLK     			__HAL_RCC_GPIOA_CLK_ENABLE()	// CS引脚IO口时钟

#define  LCD_DC_PIN						GPIO_PIN_15				         // 数据指令选择  引脚
#define	LCD_DC_PORT						GPIOE									// 数据指令选择  GPIO端口
#define 	GPIO_LCD_DC_CLK     	    __HAL_RCC_GPIOE_CLK_ENABLE()	// 数据指令选择  GPIO时钟

#define  LCD_Backlight_PIN				GPIO_PIN_15			         // 背光  引脚
#define	LCD_Backlight_PORT			    GPIOD									// 背光 GPIO端口
#define 	GPIO_LCD_Backlight_CLK     __HAL_RCC_GPIOD_CLK_ENABLE()	// 背光 GPIO时钟


/*--------------------------------------------------------- 控制宏 ---------------------------------------------------*/

// 因为片选引脚需要频繁操作，使用寄存器效率会高些
#define 	LCD_CS_H    		 	LCD_CS_PORT->BSRR  = LCD_CS_PIN							// 片选拉高
#define 	LCD_CS_L     			LCD_CS_PORT->BSRR  = (uint32_t)LCD_CS_PIN << 16U	// 片选拉低

#define	LCD_DC_Command		   HAL_GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, GPIO_PIN_RESET)	  		// 低电平，指令传输
#define 	LCD_DC_Data		      HAL_GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, GPIO_PIN_SET)				// 高电平，数据传输

#define 	LCD_Backlight_ON      HAL_GPIO_WritePin(LCD_Backlight_PORT, LCD_Backlight_PIN, GPIO_PIN_SET)		// 高电平，开启背光
#define 	LCD_Backlight_OFF  	 HAL_GPIO_WritePin(LCD_Backlight_PORT, LCD_Backlight_PIN, GPIO_PIN_RESET)	// 低电平，关闭背光

void  LCD_WriteCommand(uint8_t lcd_command);
void  LCD_WriteData_8bit(uint8_t lcd_data);
void  LCD_WriteData_16bit(uint16_t lcd_data);
void  LCD_WriteBuff(uint16_t *DataBuff, uint16_t DataSize);
#endif //BSP_SPI_H
